﻿using System.Collections.Generic;

namespace SharpTag.ID3
{
    /// <summary>
    /// Interface representing a File containing a Tag.
    /// </summary>
    public interface ITaggedFile : IFile
    {
        /// <summary>
        /// Gets the tags found in a File.
        /// </summary>
        /// <returns>A list of <see cref="ITag"/> objects found in the File.</returns>
        List<ITag> GetTags();

        /// <summary>
        /// Adds an <see cref="ITag"/> object to the File.
        /// </summary>
        /// <param name="tag">An <see cref="ITag"/> object.</param>
        void AddTag(ITag tag);

        /// <summary>
        /// Adds a list of <see cref="ITag"/> objects to the File.
        /// </summary>
        /// <param name="tags">A list of <see cref="ITag"/> objects.</param>
        void AddTags(List<ITag> tags);

        /// <summary>
        /// Removes an <see cref="ITag"/> object from the File.
        /// </summary>
        /// <param name="tag">An <see cref="ITag"/> object.</param>
        void RemoveTag(ITag tag);

        /// <summary>
        /// Removes a list of <see cref="ITag"/> objects from the File.
        /// </summary>
        /// <param name="tags">A list of <see cref="ITag"/> objects.</param>
        void RemoveTags(List<ITag> tags);
        
        /// <summary>
        /// Parses the raw tag data into the appropriate properties.
        /// </summary>
        /// <param name="tagBytes">A byte array containing the raw tag data.</param>
        void ParseTag(byte[] tagBytes);
    }
}
